package com.tedu.api;

import org.junit.Test;

/**
 * API
 * String   字符串类   不可改变类   BUG
 * 假设:100000000个String类---内存
 * 操作系统发现内存如果越来越小,会在硬盘上开辟空间---软件会卡
 * 建议:存储字符串类似---String
 * <p>
 * 可变
 * StringBuilder类  创建字符串随时进行改变【修改   增加   插入】
 * String不可以改变的类  频繁创建对象  带来内存损耗
 * StringBuilder类解决内存损耗
 * 创建方式:StringBuilder   sb=new StringBuilder();
 * <p>
 * <p>
 * C语言     好处:创建对象  顺便对象进行销毁
 * 例如:定义变量  int  a=malloc(4);   开辟四个字节空间
 * a=1;
 * free(a);   清理内存
 * Java语言            好处:创建完对象   不用管   等GC垃圾回收机制  进行回收
 * 例如:定义变量 int a=1;  开辟空间    交给GC【使用方便】
 */
public class StringBuilderAPI {
    /**
     * java.lang  包下
     * StringBuilder可变字符串对象类
     * 什么情况下使用:有大量字符串拼接  建议StringBuilder
     * String str="123"   String  s="456"      str+s出现新对象
     * append()方法   :拼接  等同于String加号意思
     */
    @Test
    public void testStringBuilderAPI() {
        String str = "你是我的";
        //创建一个空的字符串  接收传入的字符串【原有字符串上大量拼接】
        StringBuilder sb = new StringBuilder(str);//不会产生新对象
        sb.append("小可爱~");
        System.out.println("原来的对象:" + sb);
    }

    /**
     * StringBuilder 可变的字符串
     * replace(开始坐标，结束坐标，替换字符串)   替换   含头不含尾
     * 作用:可以将字符串中指定范围的内存替换成给定的字符串
     */
    @Test
    public void testReplace() {
        StringBuilder sb = new StringBuilder("你就是我的，小可爱~");
        sb.replace(6, 9, "小baby");
        System.out.println("SB替换后的;" + sb);
    }

    /**
     * StringBuilder与StringBuffer---可变字符串类【用法完全一致】
     * append方法,replace方法，insert方法通用
     * insert()方法    返回值String
     * 作用:将给定字符串插入到当前的字符串当中
     */
    @Test
    public void testInsert() {
        StringBuffer sb = new StringBuffer("你都是我的小可爱");
        sb.insert(0, "从今以后的每天");
        System.out.println("插入后字符串:" + sb);
    }

    //1.输出字符串"HelloJava"的字符串长度
    @Test
    public void testLength() {
        String s = "HelloJava";    //使用length从1开始
        System.out.println(s.length());//9
    }

    //2.输出"HelloJava"中o的位置
    @Test
    public void testIndexOf() {
        String str = "HelloJava";
        int index = str.indexOf("o");
        System.out.println("HelloJava中o的位置" + index);


        //3.输出"HelloJava"中下标为5处开始第一次出现以"o"的位置
        //重载方法：方法名相同，参数不同
        //indexOf("查找字符串"，字符串位置)
        //功能：从指定位置下进行查找，下一个o的位置
        index = str.indexOf("o", 5);
        System.out.println("HelloJava中下标为5处开始第一次出现以o的位置" + index);
    }

    //4.截取"HelloJava"中"Hello"并输出
    @Test
    public void testSubString() {
        String url = "HelloJava";
        //需求：获取当前字符串中：Hello子字符串
        String s = url.substring(0, 5);
        System.out.println("截取后子字符串" + s);


        //5.截取"HelloJava"中"Java"并输出
        String s1 = url.substring(5);
        System.out.println("截取后子字符串" + s1);
    }

    //6.将字符串" Hello "中两边的空白去掉后输出
    @Test
    public void testTrim() {
        String str = " Hello ";
        str = str.trim(); //覆盖：不写前面的数据类型
        System.out.println(str);
    }

    //7.输出"HelloJava"中第6个字符"J"
    @Test
    public void testCharAt() {
        String str = "HelloJava";
        char c = str.charAt(5);
        System.out.println("获取的字符是" + c);
    }

    //8.将"HelloJava"转换为小写，然后转换为大写
    @Test
    public void testUL() {
        String str = "HelloJava";  //判断：大小写分明   需求：转大小写
        str = str.toLowerCase().trim();
        System.out.println("转化为小写：" + str);
        str = str.toUpperCase().trim();
        System.out.println("转化为大写：" + str);
    }
}


































